package com.ruoyi.network.service;

import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.network.domain.entity.IpRange;
import com.ruoyi.network.model.vo.IpRangeCountVO;
import com.ruoyi.network.model.vo.IpRangePageVO;
import com.ruoyi.network.model.vo.IpRangeRequestVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * IP段结构Service接口
 *
 * @author lyp
 * @date 2024-12-05
 */
public interface IIpRangeService {
    /**
     * 查询IP段结构
     *
     * @param id IP段结构主键
     * @return IP段结构
     */
    IpRange selectIpRangeById(Long id);

    /**
     * 查询IP段结构列表
     *
     * @param vo 分页参数
     * @return TableDataInfo 分页结果
     */
    TableDataInfo selectIpRangeList(IpRangePageVO vo);

    /**
     * 新增IP段结构
     *
     * @param vo IP段结构
     * @return int 结果
     */
    int insertIpRange(IpRangeRequestVO vo);

    /**
     * 修改IP段结构
     *
     * @param vo IP段结构
     * @return int 结果
     */
    int updateIpRange(IpRangeRequestVO vo);

    /**
     * 批量删除IP段结构
     *
     * @param ids 需要删除的IP段结构主键集合
     * @return 结果
     */
    int deleteIpRangeByIds(List<Long> ids);

    /**
     * 删除IP段结构信息
     *
     * @param id IP段结构主键
     * @return 结果
     */
    int deleteIpRangeById(Long id);

    /**
     * 网段统计结果
     *
     * @param vo 统计参数VO
     * @return long 统计结果
     */
    long count(IpRangeCountVO vo);

    /**
     * IP段数据导入
     *
     * @param file 带解析文件
     * @return Boolean 结果
     */
    Boolean importExcel(MultipartFile file);

    /**
     * 校验IP段重复性
     *
     * @param collection 待校验数据
     * @return List<String> IP段列表
     */
    List<String> checkIpRangeUnique(Collection<String> collection);

    /**
     * 批量插入
     *
     * @param rangeList 待入库数据
     * @return int 插入数量
     */
    Boolean batchInsertion(List<IpRange> rangeList);

    /**
     * 导出
     *
     * @param response 响应域
     * @param vo       查询参数
     */
    void export(HttpServletResponse response, IpRangePageVO vo);

    /**
     * 通过Id查询网段
     *
     * @param rangeId 网段ID
     * @return IpRange 网段实体
     */
    IpRange findById(Long rangeId);

    /**
     * 通过ID查询网段集合
     *
     * @param rangeIds 网段ID集合
     * @return List<IpRange> 网段集合
     */
    List<IpRange> findByIds(List<Long> rangeIds);

    /**
     * 通过网段名称获取网段集合
     *
     * @param strings 网段名称集合
     * @return Map<String, IpRange> 网段集合
     */
    Map<String, IpRange> findByRangeNames(Collection<String> strings);
}
